/*
 * Copyright (c) 2015, Nils Braden
 *
 * This file is part of ttrss-reader-fork. This program is free software; you
 * can redistribute it and/or modify it under the terms of the GNU
 * General Public License as published by the Free Software Foundation;
 * either version 3 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details. You should have received a
 * copy of the GNU General Public License along with this program; If
 * not, see http://www.gnu.org/licenses/.
 */

package org.ttrssreader.model;

import org.ttrssreader.controllers.Controller;
import org.ttrssreader.controllers.DBHelper;
import org.ttrssreader.utils.Utils;

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

class FeedCursorHelper extends MainCursorHelper {

    @SuppressWarnings("unused")
    private static final String TAG = FeedCursorHelper.class.getSimpleName();

    FeedCursorHelper(int categoryId) {
        super();
        this.categoryId = categoryId;
    }

    @Override
    public Cursor createCursor(SQLiteDatabase db, boolean overrideDisplayUnread, boolean buildSafeQuery) {

        StringBuilder query = new StringBuilder();

        String lastOpenedFeedsList = Utils.separateItems(Controller.getInstance().lastOpenedFeeds, ",");

        boolean displayUnread = Controller.getInstance().onlyUnread();
        boolean invertSortFeedCats = Controller.getInstance().invertSortFeedscats();

        if (overrideDisplayUnread)
            displayUnread = false;

        if (lastOpenedFeedsList.length() > 0 && !buildSafeQuery) {
            query.append("SELECT _id,title,unread FROM (");
        }

        query.append("SELECT _id,title,unread FROM ");
        query.append(DBHelper.TABLE_FEEDS);
        query.append(" WHERE categoryId=");
        query.append(categoryId);
        query.append(displayUnread ? " AND unread>0" : "");

        if (lastOpenedFeedsList.length() > 0 && !buildSafeQuery) {
            query.append(" UNION SELECT _id,title,unread");
            query.append(" FROM feeds WHERE _id IN (");
            query.append(lastOpenedFeedsList);
            query.append(" ))");
        }

        query.append(" ORDER BY UPPER(title) ");
        query.append(invertSortFeedCats ? "DESC" : "ASC");
        query.append(buildSafeQuery ? " LIMIT 200" : " LIMIT 600");

        return db.rawQuery(query.toString(), null);
    }

}
